package controlador;
import modelo.Lote;
import java.awt.GraphicsEnvironment;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.lang.reflect.Array;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.ArrayList;
import java.util.Calendar;

import javax.swing.JOptionPane;

import modelo.Deposito;
import modelo.DetallePedido;
import modelo.Drogueria;
import modelo.Factura;
import modelo.FacturaCompra;
import modelo.ItemCompra;
import modelo.Linea;
import modelo.Pedido;
import modelo.Producto;
import vista.VentanaAgregarDeposito;
import vista.VentanaDetallePedidoModeloTabla;
import vista.VentanaModeloCompra;
import vista.VentanaPedido;
import vista.VentanaPrincipal;
import modelo.Despacho;

public class ControladorVentanaPedido implements ActionListener {
		private VentanaPedido ventanaPedido;
		private VentanaPrincipal ventanaPrincipal;
		private Drogueria drogueria;
		private int posi;
		private ItemCompra itemCompra;
		private Lote lote;
		private ControladorAgregarCliente controladorAgregarCliente;
		private ArrayList<Producto> productos;
		private ArrayList<Lote> arrayLote;
		private int cont =0;
		private ArrayList<DetallePedido> detallePedido;
		private Linea lineas;
		private String cod;
		private FacturaCompra facturaCompra;
		private Linea linea;
		private Despacho despacho;
	

		
		public ControladorVentanaPedido(Drogueria dro, ArrayList<Producto> pro) {
			// TODO Auto-generated constructor stub
			
			ventanaPedido  = new VentanaPedido();
			
			ventanaPedido.setLocationRelativeTo(null);
			ventanaPedido.setVisible(true);
			ventanaPedido.agregarListener(this);
			drogueria = dro;
			this.productos = pro;
			
			arrayLote = new ArrayList();
			
		
			this.facturaCompra = new FacturaCompra();
		
			this.detallePedido = new ArrayList<>();
			this.arrayLote = new ArrayList();
			
			ventanaPedido.mostrarMensaje(""+ this.drogueria.getNombreProductosComprados());
			
			
			
			ventanaPedido.setProductosComboBox(this.drogueria.getNombreProductosComprados());
			
			ventanaPedido.setListado(new VentanaDetallePedidoModeloTabla(this.arrayLote));
			this.determinarNumeroFactura();
			
			
			SimpleDateFormat dt = new SimpleDateFormat("dd/MM/yyyy");
			ventanaPedido.setFecha(dt.format(new Date()));
			
			
			
		}
		
		public void actionPerformed(ActionEvent ae){
			
			if (ae.getActionCommand().equalsIgnoreCase("Facturar")){ 
				facturar();
				
			}else if (ae.getActionCommand().equalsIgnoreCase("Cancelar")){
				ventanaPedido.limpiarCampos();
				this.arrayLote = new ArrayList<>();
				ventanaPedido.setListado(new VentanaDetallePedidoModeloTabla(this.arrayLote));
				
				SimpleDateFormat dt = new SimpleDateFormat("dd/MM/yyyy");
				ventanaPedido.setFecha(dt.format(new Date()));
				
				
			}else if (ae.getActionCommand().equalsIgnoreCase("Salir")){
				ventanaPedido.dispose();
		     	
			} else if (ae.getActionCommand().equalsIgnoreCase("Agregar")){
				agregar();
		     	
			} else if (ae.getActionCommand().equalsIgnoreCase("Quitar")){
			
				System.out.print("Quita");
		     
			}else if (ae.getActionCommand().equalsIgnoreCase("Buscar")){
				buscarCliente();
				
		     }else if (ae.getActionCommand().equalsIgnoreCase("Despachar")){
					ventanaPedido.setEstado("Pedido Despachado");
					
					this.drogueria.agregarDespacho(despacho);
					
					ventanaPedido.inhabilitarFacturar();
					
					this.arrayLote = new ArrayList();
					ventanaPedido.setProductosComboBox(drogueria.getNombreProductoComboBox());
					ventanaPedido.setListado(new VentanaDetallePedidoModeloTabla(this.arrayLote));
					this.determinarNumeroFactura();
					ventanaPedido.mostrarMensaje("Despacho Listo");
					ventanaPedido.setEstado("");
			     }
		}
		
		private void agregar() {
			//int i = linea.buscarProducto(desc);
			
		
			String codigo = this.drogueria.nombreProductoDesc( ventanaPedido.getProducto() );
			int cant = ventanaPedido.getCantidad();
			//this.facturaCompra.get
			
			
			Lote lo = facturaCompra.devolverUltimoVencer(codigo, cant);
		if (lo == null){
			ventanaPedido.mostrarMensaje("El pedido no se puede realizar");
			
		}	
		else{
//			this.lote = new Lote("234", "Atamel forte", 400 , "hol", new Date(), "Paleta","2","44"); 
	           // this.itemCompra.agregarLote(this.lote);
					
			//	String numeroLote, String descripcion,
			//	int cantLote, String proveedor,
			//	Date fechaVencimiento, String contenedor, String numContenedor,
			//	String codDeposito
				
				
				Lote lotee = new Lote( codigo, ventanaPedido.getProducto() , cant, lo.getProveedor(), lo.getFechaVencimiento(), lo.getContenedor(),
						             lo.getNumContenedor(), lo.getCodDeposito());
				this.arrayLote.add(lotee);
				
				//DetallePedido detallePedido = new DetallePedido(this.getCodProductoLote(cod), arrayLote.get(i).getDescripcion(),
				//ventanaPedido.getCantidad(), arrayLote.get(i).getCodDeposito(), 
				// arrayLote.get(i).getContenedor(),arrayLote.get(i).getNumContenedor(),arrayLote.get(i).getFechaVencimiento());
				
				//this.detallePedido.add(detallePedido);
				ventanaPedido.setListado(new VentanaDetallePedidoModeloTabla(this.arrayLote));
				ventanaPedido.setProductosComboBox(drogueria.getNombreProductoComboBox());
				ventanaPedido.limpiarCant();
			
		}
		}


		public void facturar(){
			Lote lote1;
			DetallePedido dPedido;
			if (ventanaPedido.validar()== true){
			
			
				//Pedido
			Date fecha = new Date();
			String cedulac = ventanaPedido.getCedula();
			String nombrec = ventanaPedido.getNombre();
			String numPedido = ventanaPedido.getNumero();
			
			//Despacho
			String numDespacho = ventanaPedido.getNumero();
			
			String numFactura = ventanaPedido.getNumero();
		
			Pedido pedido = new Pedido(numPedido,fecha,cedulac);	//listo falta el array list que llenar de detalle pedido

				//Lote
			//String numeroLote, String descripcion,
			//int cantLote, String proveedor,
			//Date fechaVencimiento, String contenedor, String numContenedor,
			//String codDeposito
			
			
			//Detalle de pedido
			//String codigoProducto, String descripcionProducto, int cantidad, 
			//String deposito, String contenedor, String numeroContenedor, Date fechaVencimientoProducto
			
			for (int i = 0; i < this.arrayLote.size(); i++) {
				 //Lote lotee = new Lote( codigo, ventanaPedido.getProducto() , cant, lo.getProveedor(), lo.getFechaVencimiento(), lo.getContenedor(),
	           //  lo.getNumContenedor(), lo.getCodDeposito());

				lote1 = this.arrayLote.get(i);
				dPedido = new DetallePedido(lote1.getNumeroLote(), lote1.getDescripcion(), lote1.getCantLote(),
										  lote1.getCodDeposito(), lote1.getContenedor(), lote1.getNumContenedor(), lote1.getFechaVencimiento());
				pedido.agregarDetallePedido(dPedido);
				
				//para restar en el lote
			//	this.facturaCompra.compararLotes(lote1, lote1.getCantLote());
				
				//para restar en la existencia total
				this.drogueria.restarExistenciaProducto(lote1.getNumContenedor(), lote1.getCantLote());
				this.drogueria.agregarPedido(pedido);
			}
			
			 despacho = new Despacho(numDespacho,fecha,numFactura);
		
			Factura factura = new Factura(numFactura,fecha,numPedido);
		
		
			//DetallePedido detallePedido = new DetallePedido();
			
			//drogueria.agregarDespacho(despacho);
			ventanaPedido.mostrarMensaje("Registro Exitoso");
			ventanaPedido.limpiarCampos();
			
	
			
			}
			
			else
				ventanaPedido.mostrarMensaje("Debe llenar todos los campos");
			
			ventanaPedido.setEstado("Pedido Facturado");
			ventanaPedido.inhabilitarFacturar();
			
			}
		
		/*public void buscarProductoLote(){
			String producto = ventanaPedido.getProducto();
		    for (int i=0; itemCompra.cantLotes(); i++){
		    	if(producto == lote.getDescripcion(i)){
		    		String cod = itemCompra.getLotes
		    				lote.getCodProducto(i);
		    		String desc = lote.getDescripcion(i);
		    		int cant = ventanaPedido.getCantidad();
		    		String dep = lote.getCodDeposito(i);
		    		
		    	}
		    }
		}*/
		
		public void buscarCliente(){
			String cedula = ventanaPedido.getCedula();
			if(!cedula.equalsIgnoreCase("")){
				int pos = drogueria.buscarCliente(cedula);
				  
				if(pos!=-1){
					
					ventanaPedido.setNombre(drogueria.getCliente(pos).getNombre()+ " " + drogueria.getCliente(pos).getApellido());

					this.posi = pos;
				}
				else{
					int resp = JOptionPane.showConfirmDialog(ventanaPedido, "Cliente no Registrado. ¿Desea Registar?");
					if ( resp == 0  ){
						
						controladorAgregarCliente = new ControladorAgregarCliente(this.drogueria);
					}
					else if ( resp == 1  ){
						ventanaPedido.mostrarMensaje("no registrar");
					}
					else if (resp == 2  ){
						ventanaPedido.mostrarMensaje("Registrar cancelado");
					}
				}
			}
			else{
				
				ventanaPedido.mostrarMensaje("Por favor ingrese Cédula del Cliente");

			}
		}
		
		public void setFocus(){
			ventanaPedido.setFocus();
		}
		
		public void inhabilitar(){
			ventanaPedido.inhabilitarNumero();
			ventanaPedido.inhabilitarFecha();
		}
		
		public void determinarNumeroFactura(){
			ventanaPedido.setNumero(String.valueOf("00"+ cont++));
		}
		

	public String getCodProductoLote(String desc){
		int i = itemCompra.buscarProducto(desc);
		int pos = lineas.buscarProducto(desc);
		//String cod=null;
		if (itemCompra.getLotes().get(i).getDescripcion() == lineas.getProductos().get(pos).getDescripcion() ){
			cod = lineas.getProductos().get(pos).getCodigo();
		}
		return cod;
	}
		
	public void quitarItem(){
	
	}
		
	
	
}